package com.cn.zsl.redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class RedisTopic {

	@Test
	// 订阅频道数据
	public void testSubscribe() {
	    //连接Redis数据库
	    Jedis jedis = new Jedis("192.168.220.128", 6379);
	    JedisPubSub jedisPubSub = new JedisPubSub() {

	        // 当向监听的频道发送数据时，这个方法会被触发
	        @Override
	        public void onMessage(String channel, String message) {
	            System.out.println("收到消息" + message);
	            //当收到 "unsubscribe" 消息时，调用取消订阅方法
	            if ("unsubscribe".equals(message)) {
	                this.unsubscribe();
	            }
	        }

	        // 当取消订阅指定频道的时候，这个方法会被触发
	        @Override
	        public void onUnsubscribe(String channel, int subscribedChannels) {
	            System.out.println("取消订阅频道" + channel);
	        }

	    };
	    // 订阅之后，当前进程一致处于监听状态，当被取消订阅之后，当前进程会结束
	    jedis.subscribe(jedisPubSub, "ch1");
	}

	@Test
	// 发布频道数据
	public void testPubSub() throws Exception {
	    //链接Redis数据库
	    Jedis jedis = new Jedis("192.168.220.128", 6379);
	    //发布频道 "ch1" 和消息 "hello redis"
	    jedis.publish("ch1", "zhangshunli");
	    //关闭连接
	    jedis.close();
	}
	
}
